package com.skiving.cloud.admin.entity;

import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.Table;
import java.io.Serializable;
import java.time.LocalDateTime;

import java.io.Serial;
import java.util.List;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 系统用户 实体类。
 *
 * @author skivingcloud
 * @since 2025-03-08
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("系统用户")
@Table("sys_user")
public class SysUser implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    @Id
    @ApiModelProperty("")
    private String id;

    /**
     * 用户名
     */
    @ApiModelProperty("用户名")
    private String username;

    /**
     * 密码
     */
    @ApiModelProperty("密码")
    private String password;

    /**
     * 盐
     */
    @ApiModelProperty("盐")
    private String salt;

    /**
     * 邮箱
     */
    @ApiModelProperty("邮箱")
    private String email;

    /**
     * 手机号
     */
    @ApiModelProperty("手机号")
    private String mobile;

    /**
     * 用户状态：100201-正常、100202-锁定、100203-停用、100204-删除
     */
    @ApiModelProperty("用户状态：100201-正常、100202-锁定、100203-停用、100204-删除")
    private String status;

    /**
     * 创建者
     */
    @ApiModelProperty("创建者")
    private String createUserId;

    /**
     * 创建时间
     */
    @ApiModelProperty("创建时间")
    private LocalDateTime createTime;

    /**
     * 员工编号
     */
    @ApiModelProperty("员工编号")
    private String staffId;

    /**
     * ERP企业编号
     */
    @ApiModelProperty("ERP企业编号")
    private String enterpriseId;

    /**
     * ERP企业名称
     */
    @ApiModelProperty("ERP企业名称")
    private String enterpriseName;

    /**
     * 姓名
     */
    @ApiModelProperty("姓名")
    private String staffName;

    /**
     * 证件类型 01-居民身份证、02-居民户口薄、03-驾驶证、04-军官证、05-士兵证、06-军官离退休证、07-中国护照、08-异常身份证、09-港澳台通行证、10-台湾通行证、11-回乡证、51-外国护照、52-旅行证、53-居留证件、71-组织机构代码证、72-税务登记证、73-营业执照、99-其他证件
     */
    @ApiModelProperty("证件类型 01-居民身份证、02-居民户口薄、03-驾驶证、04-军官证、05-士兵证、06-军官离退休证、07-中国护照、08-异常身份证、09-港澳台通行证、10-台湾通行证、11-回乡证、51-外国护照、52-旅行证、53-居留证件、71-组织机构代码证、72-税务登记证、73-营业执照、99-其他证件")
    private String idType;

    /**
     * 证件号码
     */
    @ApiModelProperty("证件号码")
    private String idNo;

    /**
     * 最后修改人
     */
    @ApiModelProperty("最后修改人")
    private String lastChangeder;

    /**
     * 最后修改时间
     */
    @ApiModelProperty("最后修改时间")
    private LocalDateTime lastChangedTime;

    /**
     * 最后修改密码时间
     */
    @ApiModelProperty("最后修改密码时间")
    private LocalDateTime lastChangedPwdTime;

    /**
     * 登录错误次数
     */
    @ApiModelProperty("登录错误次数")
    private Integer errorTime;

    /**
     * 登录状态(0-未登录 1-已登录)
     */
    @ApiModelProperty("登录状态(0-未登录 1-已登录)")
    private String loginStatus;

    /**
     * 提醒修改密码周期(单位：天)
     */
    @ApiModelProperty("提醒修改密码周期(单位：天)")
    private Integer alterTime;

    /**
     * 最后登录时间
     */
    @ApiModelProperty("最后登录时间")
    private LocalDateTime loginTime;

    /**
     * 排序
     */
    @ApiModelProperty("排序")
    private Long orderNum;

    /**
     * 审核状态
     */
    @ApiModelProperty("审核状态")
    private String chkStatus;

    /**
     * 组织机构
     */
    @ApiModelProperty("组织机构")
    private String orgId;

    /**
     * 当前皮肤
     */
    @ApiModelProperty("当前皮肤")
    private String skin;

    /**
     * 对接外部系统识别账号
     */
    @ApiModelProperty("对接外部系统识别账号")
    private String accountName;

    /**
     * 上次登录终端：1-PC、2-APP
     */
    @ApiModelProperty("上次登录终端：1-PC、2-APP")
    private String loginTerminal;

    /**
     * 租户
     */
    @ApiModelProperty("租户")
    private String tenantId;

    @Column(ignore = true)
    private String token;

    @Column(ignore = true)
    private String tenantName;

    @Column(ignore = true)
    private String orgName;

    @Column(ignore = true)
    private List<String> roleIds;

    @Column(ignore = true)
    private List<String> stationIds;

    @Column(ignore = true)
    private List<String> menuIds;
}
